package edu.nf.project.services.storeOperation;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import edu.nf.project.entitys.entity.storeOperation.convention.dish.Dish;
import edu.nf.project.entitys.entity.storeOperation.convention.dish.DishType;
import edu.nf.project.entitys.enums.storeOperation.DishStatusEnum;
import edu.nf.project.entitys.enums.storeOperation.DtNameEnum;
import edu.nf.project.services.response.ResultVO;

import java.util.List;

/**
 * 菜品服务接口
 */
public interface DishService {
    /**
     * 获取所有菜品列表
     * @return 所有菜品的集合
     */
    List<Dish> getDishList();

    /**
     * 分页查询菜品列表
     * @param page 分页参数
     * @param dishName 菜品名称（可选）
     * @param dtId 菜品类型ID（可选）
     * @return 分页结果
     */
    Page<Dish> getDishList(Page<Dish> page, String dishName, Integer dtId);

    /**
     * 获取菜品详细信息
     * @param dishId 菜品ID
     * @return 菜品信息
     */
    Dish getDishInfo(Integer dishId);

    /**
     * 创建新菜品
     * @param dish 菜品信息
     * @return 是否成功
     */
    boolean createDish(Dish dish);

    /**
     * 更新菜品信息
     * @param dishId 菜品ID
     * @param dish 菜品信息
     * @return 是否成功
     */
    boolean updateDish(Integer dishId, Dish dish);

    /**
     * 更新菜品状态
     * @param dishId 菜品ID
     * @param status 菜品状态
     * @return 是否成功
     */
    boolean updateDishStatus(Integer dishId, DishStatusEnum status);

    /**
     * 获取菜品类型
     * @param dishId 菜品ID
     * @return 菜品类型名称
     */
    String getDishType(Integer dishId);

    /**
     * 获取全部菜品类型
     * @return 菜品类型名称
     */
    String[] getDishTypes();

    /**
     * 获取全部菜品类型对象
     * @return 菜品类型对象集合
     */
    List<DishType> getAllDishTypes();

    /**
     * 删除某个菜品类型
     * @return 是否成功
     */
    Boolean delDishType(Integer dtId);

    /**
     * 添加某个菜品类型
     * @return 是否成功
     */
    Boolean addDishType(String dt);

    /**
     * 修改某个菜品类型
     * @return 是否成功
     */
    Boolean updDishType(Integer dt, String name);

    /**
     * 获取全部菜品
     * @return 菜品对象集合
     */
    List<Dish> getAllDish();

    /**
     * 退菜
     * @param orderId 订单ID
     * @param dishId 菜品ID
     * @return 是否成功
     */
    Boolean returnDish(Integer orderId, Integer dishId);


    /**
     * 定时任务
     */
    void optimizeDishPriority();
} 